<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>

<script>
    // 普通调用
    // function fn(){
    //     console.log(1111111);
    // }
    // fn();


    // 函数嵌套
    // 1. 函数嵌套过程中 外层函数需等待内层函数执行完毕才能继续向后执行
    // 2. 函数嵌套过程中 内层函数的返回值 => 是内层函数的执行结果,不会主动传递给外层 
    // function fn(){
    //     function a(){
    //         return 100;
    //     }
    //     return a();  // 100
    // }
    // var res = fn();
    // console.log(res);


</script>

<script>
    // 递归 => 函数在执行过程中重复调用自身
    // 1. 递归要有跳出条件, 否则就是死递归
    // 2. 递归的特征 先传递 在回归

    // 死递归 => 根本跳不出来
    // function fn(){
    //     console.log(111111);
    //     fn()
    // }
    // fn();


    // 借鉴死循环   => 只要能让函数满足条件时跳出来即可
    // var i = 100;
    // var sum = 0;

    // while(true){
    //     console.log(i);
    //     sum += i;
    //     if(i>= 100 ){
    //         break;
    //     }
    //     i--;
    // }

    // var i = 1;
    // var sum = 0;
    // function fn(){// i = 1  2  3 .... 99 100
    //     console.log(i);
    //     sum += i;
    //     if(i >= 100){
    //         return sum;
    //     }else{
    //         i++;
    //         return fn()
    //     }
    // }
    // var res = fn();
    // console.log(res);



    // i - 100的和
    // function fn(i,sum){// i = 1  2  3 .... 99 100
    //     console.log(i); // 1
    //     sum += i;   // 1
    //     if(i >= 100){
    //         return sum;
    //     }else{
    //         i++;
    //         return fn(i,sum)
    //     }
    // }
    // var res = fn(1,0);
    // console.log(res);

    // 1-i的和
    function fn(i,sum){// i = 5  sum= 0
        console.log(i,sum); // i = 5  4  3   2     1 
        sum += i;   //  sum = 5 + 4  + 3  + 2  + 1
        if(i <= 1){
            return sum;  // 15
        }else{
            // i --     
            return fn( i - 1 ,sum); // 
        }
    }
    var res = fn(5,0);
    console.log(res);

    // fn(5,0)  =>  fn(4, 5) => fn(3,9) => fn(2,12)  => fn(1,14)
    //                                                     ||
    //    15    <=      15    <=    15  <=     15    <=    15

    // 王者荣耀(6元)
    // 你  =>  同桌A  =>  同桌B  =>  同桌C  => 同桌D
    //                                         ||
    // 6   <=    6   <=   6    <=     6   <=   6








   






</script>
</html>